package main

import (
	"fmt"
	"math"
)

// 官方题解~~~~
func bulbSwitch(n int) int {
	return int(math.Sqrt(float64(n) + 0.5))
}


// 我的题解, 最基本的直接模拟，代码很冗余（会超时）
func bulbSwitch(n int) int {
	if n == 0 {
		return 0
	}
	lights := make([]int, n)

	for i := 1; i < n + 1; i++ {
		if i == 1 {
			// 全部变亮
			for j := 0; j < n; j ++ {
				lights[j] = 1
			}
			continue
		}
		if i == 2 {
			// 每两个关闭一个
			for j := 1; j < n; j += 2 {
				lights[j] = 0
			}
			continue
		}
		// 第 i 个反转
		for j := i - 1; j < n; j += i {
			turned := lights[j]
			if turned == 0 {
				lights[j] = 1
			} else {
				lights[j] = 0
			}
		}
	}
	rst := 0
	for _, num := range lights {
		rst += num
	}
	fmt.Println(lights)
	return rst
}

// 以 6 为例子
// [1, 1, 1, 1, 1, 1]
// [1, 0, 1, 0, 1, 0]
// [1, 0, 0, 0, 1, 1]
//           1
//              0
//                 0
// 1, 0, 0, 1, 0, 0
